import axios from 'axios'
import store from '../store'
import {
	getToken,
	removeToken
} from '../utils/auth'
import errorCode from '../utils/errorCode'

import {
	UniAdapter
} from "uniapp-axios-adapter";


const isBrowser = typeof window !== "undefined";

axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'


// 创建axios实例
const service = axios.create({
	// axios中请求配置有baseURL选项，表示请求URL公共部分
	baseURL: store.state.baseURL,
	// 超时
	timeout: 30000,
	...(!isBrowser ? {
		UniAdapter
	} : {})
})
// request拦截器
service.interceptors.request.use(config => {
	// 是否需要设置 token
	const isToken = (config.headers || {}).isToken === false
	if (getToken() && !isToken) {
		config.headers['token'] = getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
		// config.headers['Authorization'] = 'Bearer ' + getToken();
	}
	// get请求映射params参数
	if (config.method === 'get' && config.params) {
		let url = config.url + '?'
		for (const propName of Object.keys(config.params)) {
			const value = config.params[propName]
			var part = encodeURIComponent(propName) + '='
			if (value !== null && typeof(value) !== 'undefined') {
				if (typeof value === 'object') {
					for (const key of Object.keys(value)) {
						if (value[key] !== null && typeof(value[key]) !== 'undefined') {
							const params = propName + '[' + key + ']'
							const subPart = encodeURIComponent(params) + '='
							url += subPart + encodeURIComponent(value[key]) + '&'
						}
					}
				} else {
					url += part + encodeURIComponent(value) + '&'
				}
			}
		}
		url = url.slice(0, -1)
		config.params = {}
		config.url = url
	}
	return config
}, error => {
	console.log(error)
	Promise.reject(error)
})

// 响应拦截器
service.interceptors.response.use(res => {
		// 未设置状态码则默认成功状态
		const code = res.data.code || 200
		// 获取错误信息
		const msg = errorCode[code] || res.data.msg || errorCode['default']
		if (code === 401) {
			// MessageBox.confirm('登录状态已过期，您可以继续留在该页面，或者重新登录', '系统提示', {
			// 	confirmButtonText: '重新登录',
			// 	cancelButtonText: '取消',
			// 	type: 'warning'
			// }).then(() => {

			// 	localStorage.setItem('logUrl', router.currentRoute.fullPath);
			// 	router.push({
			// 		path: '/Login?login=1'
			// 	});

			// }).catch(() => {})
			uni.showModal({
				title: '系统提示',
				content: '登录状态已过期，点击“重新登录”跳转到登录页面',
				confirmText: '重新登录',
				showCancel: false,
				success: function(res) {
					if (res.confirm) {
						console.log('用户点击确定');
						// 清除登录相关的缓存
						removeToken()
						uni.removeStorageSync("user-info")
						// 跳转登录界面
						uni.reLaunch({
							url: "/pages/user/user"
						});
					}
				}
			});

			return Promise.reject('无效的会话，或者会话已过期，请重新登录。')
		} else if (code === 500) {
			let needLoginMsg = msg;
			if (msg.includes("Full authentication")) {
				needLoginMsg = "需要登录后进行操作"
				// MessageBox.confirm('该操作需要登录，点击“登录”跳转到登录页面', '系统提示', {
				// 	confirmButtonText: '登录',
				// 	cancelButtonText: '取消',
				// 	type: 'warning'
				// }).then(() => {
				// 	localStorage.setItem('logUrl', router.currentRoute.fullPath);
				// 	router.push({
				// 		path: '/Login?login=1'
				// 	});
				// }).catch(() => {})
				uni.showModal({
					title: '系统提示',
					content: '该操作需要登录，点击“登录”跳转到登录页面',
					confirmText: '登录',
					success: function(res) {
						if (res.confirm) {
							console.log('用户点击确定');
							// 跳转登录界面
							uni.reLaunch({
								url: "/pages/user/user"
							});
						} else if (res.cancel) {
							console.log('用户点击取消');
						}
					}
				});
			}
			// Message({
			//   message: needLoginMsg,
			//   type: 'error'
			// })
			return Promise.reject(new Error(msg))
		} else if (code !== 200) {
			// Notification.error({
			// 	title: msg
			// })
			uni.showToast({
				title: msg
			})
			return Promise.reject('error')
		} else {
			// 把字符串total 转换成 数字 total
			if (res.data.data && res.data.data.total) {
				res.data.data.total = parseInt(res.data.data.total)
			}
			return res.data.data
		}
	},
	error => {
		console.log('err' + error)
		let {
			message
		} = error
		if (message === 'Network Error') {
			message = '后端接口连接异常'
		} else if (message.includes('timeout')) {
			message = '系统接口请求超时'
		} else if (message.includes('Request failed with status code')) {
			message = '系统接口' + message.substr(message.length - 3) + '异常'
		}
		// Message({
		// 	message: message,
		// 	type: 'error',
		// 	duration: 5 * 1000
		// })
		uni.showToast({
			title: message,
			duration: 5 * 1000
		})
		return Promise.reject(error)
	}
)

export default service